今天的主題是Webhooks
,所謂的hook
鉤子或稱掛鉤,其實是一個電腦編程術語,用來攔截某些事件或消息,方便在訊息傳達到應用程式之前進行監測或是修改。例如鍵盤或滑鼠的事件,就可以利用掛鉤來達到熱鍵設定的效果。又或者像是玩遊戲時顯示的幀率計算,也是透過掛鉤來計數其輸入輸出來完成的。用函式間的callback
來想像可能更有感覺,掛鉤可透過callback來實作,例如register(EVENT, MyEvenctCallbackFunc)
,這樣當某事件發生時,回呼函式就會被執行,進行統計或是修改等等的行為。
而Webhooks
,顧名思義就是用在Web的hooks。先想像一下利用Email訂閱某些文章的場景,我們會提供自己的信箱地址給那些服務,當有新文章時就會收到信件通知。而Webhook則是提供特定的URL,預期在某些事件發生時,能將資料往該URL發送。常見的使用案例像是臉書的粉絲專頁、Line商用帳戶都有提供類似的事件訂閱方式,當使用者與這些應用程式訂閱、解訂、互動,都可以透過Webhook轉發到我們所提供的URL上,藉以進行服務之間的串連,比如說關注或是加入好友時,透過Webhook我們可以在事件發生時,處理新用戶允許的資料儲存、回覆客製的歡迎訊息等等。
今天的挑戰內容將會實際地體驗webhook的功用,但在開始之前別忘了先把 Day 29: Webhooks複製到自己的工作區喔。
回到自己的工作區,打開今天的資料夾Webhooks
,根據右方文件所描述,接下來將會新增三個請求,各有其用途,只是為了方便將三個請求都放到同一個Collection之中,實務上三者可能是在不同的服務間被使用到。那麼先按照以下步驟來新增三個請求
echo
POST
https://postman-echo.com/post
newPayload
裡
let incomingPayload = JSON.parse(globals.previousRequest).data
pm.collectionVariables.set("newPayload", incomingPayload.message)
newPayload
,所以body這邊就使用變數來確保都會帶新的資料
{{newPayload}}
200
成功之外,還要記錄下回應的資料,然後用postman.setNextRequest(null)
來阻止collection批次運行的情況下,去執行到後續的兩個請求。
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
postman.setNextRequest(null)
console.log('Echoing my payload: ', pm.response.json().data)
Create Webhook
然後複製到今天的資料夾Webhooks
下成為第二個請求authorization
Authorization
來設定,選擇Type為API Key
,設定x-api-key
的值為{{postman_api_key}}
,這個變數是先前章節準備好的全域變數workspaceId
設定為當前工作區所用webhookName
設定為 echo webhook
collectionUid
設定為今天所用的Collection idhttps://api.getpostman.com/webhooks?workspace={{workspaceId}}
,按下發送後可得如下資訊
{
"webhook": {
"id": "1edxxd83-1bxx-49xx-bbxx-21484xxf26bf",
"name": "echo webhook",
"collection": "237592xx-ed011axx-xxxx-xxxx-xxxx-58c4ec9e85xx",
"webhookUrl": "https://newman-api.getpostman.com/run/12345678/b501c8d9-xxxx-xxxx-xxxx-f155dbc531bf",
"uid": "23759247-1ed4bd83-xxxx-xxxx-xxxx-2148412f26bf"
}
}
其中webhookUrl
需要先記下來,這就是提供給其他服務用來通知用的位址,我們將會在下一個請求使用它來模擬事件發生時的通知。webhookUrl
來模擬,想像一下把這個位址註冊到其他服務的某個事件,當事件發生時,就會呼叫此掛鉤,將資料往該位址通知更新。
方法 POST
URL 填入剛剛記錄下來的 webhookUrl
位址
Body
發送時可以把下面資料通知給指定位址
{
"message": "yellow world"
}
嘗試發送看看,整個流程會是這樣
echo
,它做的事情是收資料並記錄下來,並且因為postman.setNextRequest(null)
而停止運行,不會繼續執行到建立webhook以及觸發webhook的部分。webhook被執行的紀錄可以在Monitors
被觀察到,從控制台我們可以看到我們的webhook名稱echo webhook
被執行,執行的請求為echo
,也有在其Tests
裡被console.log
所記錄的部分
今天我們透過挑戰的內容實際體驗了webhook的用途,它提供了一種從應用程式發送資料到另一個應用程式的方法,讓我們也可以在特定的時間或事件發生時來觸發Postman裡的Collection運行。除此之外Postman還有提供客製化的webhook,讓我們可以在喜歡的應用程式和服務之間來串連自動化流程,來獲得通知、收集數據等等的功能,具體的內容可以參閱延伸閱讀
那麼今天就到這邊,明天將會是挑戰的最後一個內容,我們明天見~